package com.sdemo.utils.jedis;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.sdemo.modules.comm.controller.BaseController;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import redis.clients.jedis.AdvancedJedisCommands;
import redis.clients.jedis.BasicCommands;
import redis.clients.jedis.BinaryClient.LIST_POSITION;
import redis.clients.jedis.BinaryJedis;
import redis.clients.jedis.BitOP;
import redis.clients.jedis.BitPosParams;
import redis.clients.jedis.ClusterCommands;
import redis.clients.jedis.DebugParams;
import redis.clients.jedis.GeoCoordinate;
import redis.clients.jedis.GeoRadiusResponse;
import redis.clients.jedis.GeoUnit;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster.Reset;
import redis.clients.jedis.JedisCommands;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisPubSub;
import redis.clients.jedis.MultiKeyCommands;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
import redis.clients.jedis.ScriptingCommands;
import redis.clients.jedis.SortingParams;
import redis.clients.jedis.Tuple;
import redis.clients.jedis.ZParams;
import redis.clients.jedis.params.geo.GeoRadiusParam;
import redis.clients.jedis.params.sortedset.ZAddParams;
import redis.clients.jedis.params.sortedset.ZIncrByParams;
import redis.clients.util.Slowlog;

public class MyJedis extends BinaryJedis implements JedisCommands, MultiKeyCommands, AdvancedJedisCommands, ScriptingCommands, BasicCommands, ClusterCommands, MethodInterceptor {
	public static final Logger logger = LoggerFactory.getLogger(BaseController.class);

	/**
	 * 连接主机
	 */
	//private static String host = ConfigUtil.getString("redisHost");
	private static String host = "127.0.0.1";//PropertyHelper.getValue("redisHost");

	/**
	 * 连接端口
	 */
	private static Integer port = 6379;//ConfigUtil.getInt("redisPort");

	/**
	 * 连接密码
	 */
	private static String password = null;//ConfigUtil.getString("redisPw");

	private static String isenv = null;// ConfigUtil.getString("env");

	/**
	 * 连接池
	 */
	private static JedisPool pool;
	/**
	 * Jedis实例
	 */
	private static MyJedis inst;

	private static Map<String, Method> methodMap = new HashMap<String, Method>();

	/**
	 * 初始化
	 */
	public static void init() {
		if (null == pool) {
			if (null == host) {
				host = "127.0.0.1";
			}
			if (null == port) {
				port = 6379;
			}
			JedisPoolConfig config = new JedisPoolConfig();
			config.setMaxTotal(200); // 控制一个pool可分配多少个jedis实例，通过pool.getResource()来获取；如果赋值为-1，则表示不限制；如果pool已经分配了maxActive个jedis实例，则此时pool的状态为exhausted。
			config.setMaxIdle(5);// 控制一个pool最多有多少个状态为idle(空闲)的jedis实例；
			config.setMaxWaitMillis(1000 * 5);// 表示当borrow一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；
			config.setTestOnBorrow(false); // 在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；
			config.setTestOnReturn(false);// 在return给pool时，是否提前进行validate操作；
			config.setTestWhileIdle(true);// 空闲时测试
			// pool = new JedisPool(config, host, port);
			if ("dev".equals(isenv)) {
				pool = new JedisPool(config, host, port);
			} else {
				pool = new JedisPool(config, host, port, 10000, password);
			}
			/// redis method
			Method[] methods = Jedis.class.getMethods();
			for (Method method : methods) {
				String name = method.toGenericString().replace(Jedis.class.getName(), MyJedis.class.getName());
				methodMap.put(name, method);
			}

		}
	}

	/**
	 * 池的初始化
	 */
	static {

		init();
	}

	MyJedis() {
		super(host, port);
	}

	/**
	 * 获取实例
	 * 
	 * @return
	 */
	public static MyJedis getInstance() {

		if (null == inst) {
			Enhancer enhancer = new Enhancer();
			enhancer.setSuperclass(MyJedis.class);
			enhancer.setCallback(new MyJedis());
			inst = (MyJedis) enhancer.create();
		}

		return inst;
	}


	
	/**
	 * 销毁池
	 */
	public static void destoryPool() {
		if (null != pool) {
			pool.destroy();
		}
	}

	/**
	 * 代理方法，调用 Jedis对应的言法
	 * 
	 * Jedis没有无参构造方法无法直接代理
	 */
	@Override
	public Object intercept(Object targetObject, Method method, Object[] args, MethodProxy proxy) throws Throwable {
		Object result = null;

		Jedis jedis = null;
		try {
			jedis = pool.getResource();
			if (!method.getName().equals("finalize")) {
				Method jedisMethod = methodMap.get(method.toGenericString());
				if (null != jedisMethod) {
					result = jedisMethod.invoke(jedis, args);
				} else {
					logger.error("un implements method");
				}

			}

		} catch (Exception e) {
			logger.error("proxy call jedis error", e);
		} finally {
			pool.returnResource(jedis);
		}

		return result;
	}

	/**
	 * 
	 * @param args
	 * @author chengxuwei
	 */
	static AtomicInteger count = new AtomicInteger();

	public static void main(String[] args) throws NoSuchMethodException, SecurityException {
		MyJedis jedis = MyJedis.getInstance();
		jedis.set("_ab", "addd");
		jedis.set("_ab", "addd");
		jedis.get("");
		// jedis.hset(, field, value);

		// MyJedis.getInstance().del("test");
		// MyJedis.getInstance().incrBy("test", 10);
		// System.out.println( MyJedis.getInstance().get("test"));
		// MyJedis.getInstance().set("test", "abc");
		// System.out.println( MyJedis.getInstance().get("test"));

	}

	/**
	 * 
	 * ############################################################################# 只做方法签名，被动态代理到Jedis，如果JedisCommand中有Jedis里没有的言法，直接把Jedis的方法Copy到当前
	 * #############################################################################
	 */
	@Override
	public String clusterNodes() {

		return null;
	}

	@Override
	public String clusterMeet(String ip, int port) {

		return null;
	}

	@Override
	public String clusterAddSlots(int... slots) {

		return null;
	}

	@Override
	public String clusterDelSlots(int... slots) {

		return null;
	}

	@Override
	public String clusterInfo() {

		return null;
	}

	@Override
	public List<String> clusterGetKeysInSlot(int slot, int count) {

		return null;
	}

	@Override
	public String clusterSetSlotNode(int slot, String nodeId) {

		return null;
	}

	@Override
	public String clusterSetSlotMigrating(int slot, String nodeId) {

		return null;
	}

	@Override
	public String clusterSetSlotImporting(int slot, String nodeId) {

		return null;
	}

	@Override
	public String clusterSetSlotStable(int slot) {

		return null;
	}

	@Override
	public String clusterForget(String nodeId) {

		return null;
	}

	@Override
	public String clusterFlushSlots() {

		return null;
	}

	@Override
	public Long clusterKeySlot(String key) {

		return null;
	}

	@Override
	public Long clusterCountKeysInSlot(int slot) {

		return null;
	}

	@Override
	public String clusterSaveConfig() {

		return null;
	}

	@Override
	public String clusterReplicate(String nodeId) {

		return null;
	}

	@Override
	public List<String> clusterSlaves(String nodeId) {

		return null;
	}

	@Override
	public String clusterFailover() {

		return null;
	}

	@Override
	public String ping() {

		return null;
	}

	@Override
	public String quit() {

		return null;
	}

	@Override
	public String flushDB() {

		return null;
	}

	@Override
	public Long dbSize() {

		return null;
	}

	@Override
	public String select(int index) {

		return null;
	}

	@Override
	public String flushAll() {

		return null;
	}

	@Override
	public String auth(String password) {

		return null;
	}

	@Override
	public String save() {

		return null;
	}

	@Override
	public String bgsave() {

		return null;
	}

	@Override
	public String bgrewriteaof() {

		return null;
	}

	@Override
	public Long lastsave() {

		return null;
	}

	@Override
	public String shutdown() {

		return null;
	}

	@Override
	public String info() {

		return null;
	}

	@Override
	public String info(String section) {

		return null;
	}

	@Override
	public String slaveof(String host, int port) {

		return null;
	}

	@Override
	public String slaveofNoOne() {

		return null;
	}

	@Override
	public Long getDB() {

		return null;
	}

	@Override
	public String debug(DebugParams params) {

		return null;
	}

	@Override
	public String configResetStat() {

		return null;
	}

	@Override
	public Long waitReplicas(int replicas, long timeout) {

		return null;
	}

	@Override
	public Object eval(String script, int keyCount, String... params) {

		return null;
	}

	@Override
	public Object eval(String script, List<String> keys, List<String> args) {

		return null;
	}

	@Override
	public Object eval(String script) {

		return null;
	}

	@Override
	public Object evalsha(String script) {

		return null;
	}

	@Override
	public Object evalsha(String sha1, List<String> keys, List<String> args) {

		return null;
	}

	@Override
	public Object evalsha(String sha1, int keyCount, String... params) {

		return null;
	}

	@Override
	public Boolean scriptExists(String sha1) {

		return null;
	}

	@Override
	public List<Boolean> scriptExists(String... sha1) {

		return null;
	}

	@Override
	public String scriptLoad(String script) {

		return null;
	}

	@Override
	public List<String> configGet(String pattern) {

		return null;
	}

	@Override
	public String configSet(String parameter, String value) {

		return null;
	}

	@Override
	public String slowlogReset() {

		return null;
	}

	@Override
	public Long slowlogLen() {

		return null;
	}

	@Override
	public List<Slowlog> slowlogGet() {

		return null;
	}

	@Override
	public List<Slowlog> slowlogGet(long entries) {

		return null;
	}

	@Override
	public Long objectRefcount(String string) {

		return null;
	}

	@Override
	public String objectEncoding(String string) {

		return null;
	}

	@Override
	public Long objectIdletime(String string) {

		return null;
	}

	@Override
	public Long del(String... keys) {

		return null;
	}

	@Override
	public List<String> blpop(int timeout, String... keys) {

		return null;
	}

	@Override
	public List<String> brpop(int timeout, String... keys) {

		return null;
	}

	@Override
	public List<String> blpop(String... args) {

		return null;
	}

	@Override
	public List<String> brpop(String... args) {

		return null;
	}

	@Override
	public Set<String> keys(String pattern) {

		return null;
	}

	@Override
	public List<String> mget(String... keys) {

		return null;
	}

	@Override
	public String mset(String... keysvalues) {

		return null;
	}

	@Override
	public Long msetnx(String... keysvalues) {

		return null;
	}

	@Override
	public String rename(String oldkey, String newkey) {

		return null;
	}

	@Override
	public Long renamenx(String oldkey, String newkey) {

		return null;
	}

	@Override
	public String rpoplpush(String srckey, String dstkey) {

		return null;
	}

	@Override
	public Set<String> sdiff(String... keys) {

		return null;
	}

	@Override
	public Long sdiffstore(String dstkey, String... keys) {

		return null;
	}

	@Override
	public Set<String> sinter(String... keys) {

		return null;
	}

	@Override
	public Long sinterstore(String dstkey, String... keys) {

		return null;
	}

	@Override
	public Long smove(String srckey, String dstkey, String member) {

		return null;
	}

	@Override
	public Long sort(String key, SortingParams sortingParameters, String dstkey) {

		return null;
	}

	@Override
	public Long sort(String key, String dstkey) {

		return null;
	}

	@Override
	public Set<String> sunion(String... keys) {

		return null;
	}

	@Override
	public Long sunionstore(String dstkey, String... keys) {

		return null;
	}

	@Override
	public String watch(String... keys) {

		return null;
	}

	@Override
	public String unwatch() {

		return null;
	}

	@Override
	public Long zinterstore(String dstkey, String... sets) {

		return null;
	}

	@Override
	public Long zinterstore(String dstkey, ZParams params, String... sets) {

		return null;
	}

	@Override
	public Long zunionstore(String dstkey, String... sets) {

		return null;
	}

	@Override
	public Long zunionstore(String dstkey, ZParams params, String... sets) {

		return null;
	}

	@Override
	public String brpoplpush(String source, String destination, int timeout) {

		return null;
	}

	@Override
	public Long publish(String channel, String message) {

		return null;
	}

	@Override
	public void subscribe(JedisPubSub jedisPubSub, String... channels) {

	}

	@Override
	public void psubscribe(JedisPubSub jedisPubSub, String... patterns) {

	}

	@Override
	public String randomKey() {

		return null;
	}

	@Override
	public Long bitop(BitOP op, String destKey, String... srcKeys) {

		return null;
	}

	@Override
	public ScanResult<String> scan(int cursor) {

		return null;
	}

	@Override
	public ScanResult<String> scan(String cursor) {

		return null;
	}

	@Override
	public String pfmerge(String destkey, String... sourcekeys) {

		return null;
	}

	@Override
	public long pfcount(String... keys) {

		return 0;
	}

	@Override
	public String set(String key, String value) {

		return null;
	}

	@Override
	public String set(String key, String value, String nxxx, String expx, long time) {

		return null;
	}

	@Override
	public String get(String key) {

		return null;
	}

	@Override
	public Boolean exists(String key) {

		return null;
	}

	@Override
	public Long persist(String key) {

		return null;
	}

	@Override
	public String type(String key) {

		return null;
	}

	@Override
	public Long expire(String key, int seconds) {

		return null;
	}

	@Override
	public Long expireAt(String key, long unixTime) {

		return null;
	}

	@Override
	public Long ttl(String key) {

		return null;
	}

	@Override
	public Boolean setbit(String key, long offset, boolean value) {

		return null;
	}

	@Override
	public Boolean setbit(String key, long offset, String value) {

		return null;
	}

	@Override
	public Boolean getbit(String key, long offset) {

		return null;
	}

	@Override
	public Long setrange(String key, long offset, String value) {

		return null;
	}

	@Override
	public String getrange(String key, long startOffset, long endOffset) {

		return null;
	}

	@Override
	public String getSet(String key, String value) {

		return null;
	}

	@Override
	public Long setnx(String key, String value) {

		return null;
	}

	@Override
	public String setex(String key, int seconds, String value) {

		return null;
	}

	@Override
	public Long decrBy(String key, long integer) {

		return null;
	}

	@Override
	public Long decr(String key) {

		return null;
	}

	@Override
	public Long incrBy(String key, long integer) {

		return null;
	}

	@Override
	public Long incr(String key) {

		return null;
	}

	@Override
	public Long append(String key, String value) {

		return null;
	}

	@Override
	public String substr(String key, int start, int end) {

		return null;
	}

	@Override
	public Long hset(String key, String field, String value) {

		return null;
	}

	@Override
	public String hget(String key, String field) {

		return null;
	}

	@Override
	public Long hsetnx(String key, String field, String value) {

		return null;
	}

	@Override
	public String hmset(String key, Map<String, String> hash) {

		return null;
	}

	@Override
	public List<String> hmget(String key, String... fields) {

		return null;
	}

	@Override
	public Long hincrBy(String key, String field, long value) {

		return null;
	}

	@Override
	public Boolean hexists(String key, String field) {

		return null;
	}

	@Override
	public Long hdel(String key, String... field) {

		return null;
	}

	@Override
	public Long hlen(String key) {

		return null;
	}

	@Override
	public Set<String> hkeys(String key) {

		return null;
	}

	@Override
	public List<String> hvals(String key) {

		return null;
	}

	@Override
	public Map<String, String> hgetAll(String key) {

		return null;
	}

	@Override
	public Long rpush(String key, String... string) {

		return null;
	}

	@Override
	public Long lpush(String key, String... string) {

		return null;
	}

	@Override
	public Long llen(String key) {

		return null;
	}

	@Override
	public List<String> lrange(String key, long start, long end) {

		return null;
	}

	@Override
	public String ltrim(String key, long start, long end) {

		return null;
	}

	@Override
	public String lindex(String key, long index) {

		return null;
	}

	@Override
	public String lset(String key, long index, String value) {

		return null;
	}

	@Override
	public Long lrem(String key, long count, String value) {

		return null;
	}

	@Override
	public String lpop(String key) {

		return null;
	}

	@Override
	public String rpop(String key) {

		return null;
	}

	@Override
	public Long sadd(String key, String... member) {

		return null;
	}

	@Override
	public Set<String> smembers(String key) {

		return null;
	}

	@Override
	public Long srem(String key, String... member) {

		return null;
	}

	@Override
	public String spop(String key) {

		return null;
	}

	@Override
	public Long scard(String key) {

		return null;
	}

	@Override
	public Boolean sismember(String key, String member) {

		return null;
	}

	@Override
	public String srandmember(String key) {

		return null;
	}

	@Override
	public Long strlen(String key) {

		return null;
	}

	@Override
	public Long zadd(String key, double score, String member) {

		return null;
	}

	@Override
	public Long zadd(String key, Map<String, Double> scoreMembers) {

		return null;
	}

	@Override
	public Set<String> zrange(String key, long start, long end) {

		return null;
	}

	@Override
	public Long zrem(String key, String... member) {

		return null;
	}

	@Override
	public Double zincrby(String key, double score, String member) {

		return null;
	}

	@Override
	public Long zrank(String key, String member) {

		return null;
	}

	@Override
	public Long zrevrank(String key, String member) {

		return null;
	}

	@Override
	public Set<String> zrevrange(String key, long start, long end) {

		return null;
	}

	@Override
	public Set<Tuple> zrangeWithScores(String key, long start, long end) {

		return null;
	}

	@Override
	public Set<Tuple> zrevrangeWithScores(String key, long start, long end) {

		return null;
	}

	@Override
	public Long zcard(String key) {

		return null;
	}

	@Override
	public Double zscore(String key, String member) {

		return null;
	}

	@Override
	public List<String> sort(String key) {

		return null;
	}

	@Override
	public List<String> sort(String key, SortingParams sortingParameters) {

		return null;
	}

	@Override
	public Long zcount(String key, double min, double max) {

		return null;
	}

	@Override
	public Long zcount(String key, String min, String max) {

		return null;
	}

	@Override
	public Set<String> zrangeByScore(String key, double min, double max) {

		return null;
	}

	@Override
	public Set<String> zrangeByScore(String key, String min, String max) {

		return null;
	}

	@Override
	public Set<String> zrevrangeByScore(String key, double max, double min) {

		return null;
	}

	@Override
	public Set<String> zrangeByScore(String key, double min, double max, int offset, int count) {

		return null;
	}

	@Override
	public Set<String> zrevrangeByScore(String key, String max, String min) {

		return null;
	}

	@Override
	public Set<String> zrangeByScore(String key, String min, String max, int offset, int count) {

		return null;
	}

	@Override
	public Set<String> zrevrangeByScore(String key, double max, double min, int offset, int count) {

		return null;
	}

	@Override
	public Set<Tuple> zrangeByScoreWithScores(String key, double min, double max) {

		return null;
	}

	@Override
	public Set<Tuple> zrevrangeByScoreWithScores(String key, double max, double min) {

		return null;
	}

	@Override
	public Set<Tuple> zrangeByScoreWithScores(String key, double min, double max, int offset, int count) {

		return null;
	}

	@Override
	public Set<String> zrevrangeByScore(String key, String max, String min, int offset, int count) {

		return null;
	}

	@Override
	public Set<Tuple> zrangeByScoreWithScores(String key, String min, String max) {

		return null;
	}

	@Override
	public Set<Tuple> zrevrangeByScoreWithScores(String key, String max, String min) {

		return null;
	}

	@Override
	public Set<Tuple> zrangeByScoreWithScores(String key, String min, String max, int offset, int count) {

		return null;
	}

	@Override
	public Set<Tuple> zrevrangeByScoreWithScores(String key, double max, double min, int offset, int count) {

		return null;
	}

	@Override
	public Set<Tuple> zrevrangeByScoreWithScores(String key, String max, String min, int offset, int count) {

		return null;
	}

	@Override
	public Long zremrangeByRank(String key, long start, long end) {

		return null;
	}

	@Override
	public Long zremrangeByScore(String key, double start, double end) {

		return null;
	}

	@Override
	public Long zremrangeByScore(String key, String start, String end) {

		return null;
	}

	@Override
	public Long linsert(String key, LIST_POSITION where, String pivot, String value) {

		return null;
	}

	@Override
	public Long lpushx(String key, String... string) {

		return null;
	}

	@Override
	public Long rpushx(String key, String... string) {

		return null;
	}

	@Override
	public List<String> blpop(String arg) {

		return null;
	}

	@Override
	public List<String> brpop(String arg) {

		return null;
	}

	@Override
	public Long del(String key) {

		return null;
	}

	@Override
	public String echo(String string) {

		return null;
	}

	@Override
	public Long move(String key, int dbIndex) {

		return null;
	}

	@Override
	public Long bitcount(String key) {

		return null;
	}

	@Override
	public Long bitcount(String key, long start, long end) {

		return null;
	}

	@Override
	public ScanResult<Entry<String, String>> hscan(String key, int cursor) {

		return null;
	}

	@Override
	public ScanResult<String> sscan(String key, int cursor) {

		return null;
	}

	@Override
	public ScanResult<Tuple> zscan(String key, int cursor) {

		return null;
	}

	@Override
	public ScanResult<Entry<String, String>> hscan(String key, String cursor) {

		return null;
	}

	@Override
	public ScanResult<String> sscan(String key, String cursor) {

		return null;
	}

	@Override
	public ScanResult<Tuple> zscan(String key, String cursor) {

		return null;
	}

	@Override
	public Long pfadd(String key, String... elements) {

		return null;
	}

	@Override
	public long pfcount(String key) {

		return 0;
	}

	@Override
	public String clusterReset(Reset arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Object> clusterSlots() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String readonly() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long exists(String... arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ScanResult<String> scan(String arg0, ScanParams arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Long> bitfield(String arg0, String... arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long bitpos(String arg0, boolean arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long bitpos(String arg0, boolean arg1, BitPosParams arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<String> blpop(int arg0, String arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<String> brpop(int arg0, String arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long geoadd(String arg0, Map<String, GeoCoordinate> arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long geoadd(String arg0, double arg1, double arg2, String arg3) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Double geodist(String arg0, String arg1, String arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Double geodist(String arg0, String arg1, String arg2, GeoUnit arg3) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<String> geohash(String arg0, String... arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<GeoCoordinate> geopos(String arg0, String... arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<GeoRadiusResponse> georadius(String arg0, double arg1, double arg2, double arg3, GeoUnit arg4) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<GeoRadiusResponse> georadius(String arg0, double arg1, double arg2, double arg3, GeoUnit arg4,
			GeoRadiusParam arg5) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<GeoRadiusResponse> georadiusByMember(String arg0, String arg1, double arg2, GeoUnit arg3) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<GeoRadiusResponse> georadiusByMember(String arg0, String arg1, double arg2, GeoUnit arg3,
			GeoRadiusParam arg4) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Double hincrByFloat(String arg0, String arg1, double arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ScanResult<Entry<String, String>> hscan(String arg0, String arg1, ScanParams arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Double incrByFloat(String arg0, double arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long pexpireAt(String arg0, long arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String psetex(String arg0, long arg1, String arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long pttl(String arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String set(String arg0, String arg1, String arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Set<String> spop(String arg0, long arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<String> srandmember(String arg0, int arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ScanResult<String> sscan(String arg0, String arg1, ScanParams arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long zadd(String arg0, Map<String, Double> arg1, ZAddParams arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long zadd(String arg0, double arg1, String arg2, ZAddParams arg3) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Double zincrby(String arg0, double arg1, String arg2, ZIncrByParams arg3) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long zlexcount(String arg0, String arg1, String arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Set<String> zrangeByLex(String arg0, String arg1, String arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Set<String> zrangeByLex(String arg0, String arg1, String arg2, int arg3, int arg4) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long zremrangeByLex(String arg0, String arg1, String arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Set<String> zrevrangeByLex(String arg0, String arg1, String arg2) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Set<String> zrevrangeByLex(String arg0, String arg1, String arg2, int arg3, int arg4) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ScanResult<Tuple> zscan(String arg0, String arg1, ScanParams arg2) {
		// TODO Auto-generated method stub
		return null;
	}

}
